1.1 Dart 命令——Dart SDK 的入口

拿到庞大的 Dart SDK 后,第一感觉是很迷茫,不知道该如何下手。对于 Dart SDK,开发者实际使用时,都是与 dart 命令打交道。dart 命令就是整个 Dart SDK 的入口。我们的 Dart SDK 之旅,也是从 dart 命令展开。


dart 命令初体验

dart 命令是进行 Dart 开发时最长使用到的命令,日常的运行、编译、依赖管理,均通过 dart 命令完成。

dart 命令的功能介绍如下:

[maxiee@archlinux sdk]$ dart
A command-line utility for Dart development.

Usage: dart <command|dart-file> [arguments]

Global options:
-v, --verbose               Show additional command output.
    --version               Print the Dart SDK version.
    --enable-analytics      Enable analytics.
    --disable-analytics     Disable analytics.
    --suppress-analytics    Disallow analytics for this `dart *` run without changing the analytics configuration.
-h, --help                  Print this usage information.

Available commands:
  analyze    Analyze Dart code in a directory.
  compile    Compile Dart to various formats.
  create     Create a new Dart project.
  devtools   Open DevTools (optionally connecting to an existing application).
  doc        Generate API documentation for Dart projects.
  fix        Apply automated fixes to Dart source code.
  format     Idiomatically format Dart source code.
  info       Show diagnostic information about the installed tooling.
  pub        Work with packages.
  run        Run a Dart program.
  test       Run tests for a project.

Run "dart help <command>" for more information about a command.
See https://dart.dev/tools/dart-tool for detailed documentation.

Dart 命令的组成架构

Dart 命令由多部分组成,即包括 C/C++ 实现的 Runtime,也包括 Dart 实现的 CLI 交互命令,还包括一系列的外部 Snapshot。在调用 dart 命令时,三者有机地相结合。整体如下图所示:


源码目录

最初时,我以为 dart 命令时纯 Dart 实现的(在 Dart SDK 中被称为 dartdev,位于 pkg/dartdev 目录下),后来发现这只是一部分。

原来,在 runtime/bin/main.cc 下还有一个 C++ 的入口,这才是 dart 命令的真正入口。

在执行 dart 命令时,首先执行 C++ 的 dart 命令,在命令内启动 DartVM,之后再创建 DartDevIsolate,这个 isolate 会加载预编译的 dartdev 的 snapshot。

DartDevIsolate 就是本文开头的命令行处理部分,涉及到编译运行工作时,再交回给 C++ 部分。

以编译命令为例,DartDevIsolate 解析 dart compile 的命令行参数后,会以新进程方式再次调用 dart 命令,在 C++ 的实现中,执行具体的编译工作。


本文作者:Maeiee

本文链接:1.1 Dart 命令——Dart SDK 的入口

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!